//20071012: Eric Kao was created.

String.prototype.trim=trim;
String.prototype.leftTrim=leftTrim;
String.prototype.rightTrim=rightTrim;

/**
  去除前後空白
*/
function trim()
{
	return this.replace( /^\s+|\s+$/g, '' );
}

/**
  去除左邊空白
*/
function leftTrim()
{
    return this.replace( /(^\s*)/g, '' );
}

/**
  去除右邊空白
*/
function rightTrim()
{
    return this.replace( /(\s*$)/g, '' );
}

/**
 * 指定長度, 補上指定字元, 如: length = 5, padString = '0', 輸入值為 23, 那麼就會補上 00023
 * @idName
 * @length 補上指定字元的總長度
 * @padString 補上指定字元
 **/
function padStringByLength( idName, length, padString )
{
	var value = getObject( idName ).value;
	
	if( value.length >= length )
		return value;
		
	var minusLength = length - value.length;	
			
	for( var i = 0 ; i < minusLength ; i++ )
		value = padString + value;
		
	getObject( idName ).value = value;
}

/**
 * 指定長度, 補上 '0', 如: length = 5, 輸入值為 23, 那麼就會補上 00023
 * @idName
 * @length 補上指定字元的總長度
 **/
function padZeroByLength( idName, length )
{
	padStringByLength( idName, length, '0' );
}

/**
 * 檢查欄位字串, 如果為空白, 則 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validString( idName, message )
{
    var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
    {
        if( ( message == 'undefined' ) || message == null )
            message = '欄位' + '\"' + valueObj.title + '\"為空白';
            
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}

/**
 * 檢查欄位字串, 如果不符合指定字串長度, 則 顯示相對應的 message 
 * @idName
 * @length 字串長度
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validLengthByEqual( idName, length, message )
{
    var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    var tempLength = value.trim().length;
    
    if( tempLength != 0 && tempLength != length )
    {
        if( ( message == 'undefined' ) || message == null )
            message = '欄位' + '\"' + valueObj.title + '\"字串長度不正確, 正確長度為:' + length;
            
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}


/**
 * 檢查欄位字串為整數字串, 如果不是, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validInteger( idName, message )
{
	var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;
	
    if( !(/^\d+$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
        	message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(如:"123456")';
        	
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}

/**
 * 檢查欄位字串為浮點數字串(35 和 35.12 都可), 如果不是, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validFloat( idName, message )
{
	var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;
	
    if( !(/^\d+$/.test( value ) || /^\d+\.?\d+$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
        	message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(如:"35" 或 "35.12")';
        	
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}

/**
 * 檢查欄位字串為浮點數字串, 小數點一位(35 和 35.1 都可), 如果不是, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validFloatByOne( idName, message )
{
	var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;
	
    if( !(/^\d+$/.test( value ) || /^\d+\.?\d{1,1}$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
        	message = '欄位' + '\"' + valueObj.title + '\"格式錯誤或只能輸入到小數點第一位(如:"35" 或 "35.12")';
        	
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}

/**
 * 檢查欄位字串為浮點數字串, 小數點二位(35 和 35.12 都可), 如果不是, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validFloatByTwo( idName, message )
{
	var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;
	
    if( !(/^\d+$/.test( value ) || /^\d+\.?\d{1,2}$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
        	message = '欄位' + '\"' + valueObj.title + '\"格式錯誤或只能輸入到小數點第二位(如:"35" 或 "35.12")';
        	
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}

/**
 * 檢查家用電話格式, 如果不對, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validTel( idName, message )
{
	var valueObj = getObject( idName );
	
	var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;    
	
    if(!(/^0\d{1,2}-\d{6,8}$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
        	message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(如:"02-29126204")';
        	
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}

/**
 * 檢查行動電話格式, 如果不對, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validMobilePhone( idName, message )
{
    var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;    
    
    if(!(/^\d{4}-\d{6}$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
            message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(如:"0918-123456")';
            
        alert( message );
        
        valueObj.focus();
        
        return false;
    }
    
    return true;
}

/**
 * 檢查符合電子郵件的格式, 如果不對, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validEmail( idName, message )
{
	var valueObj = getObject( idName );
	
	var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;
	
    if( !( /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
    	message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(如"eric.kao@e885.idv.tw")';
    	
        alert( message );
    
        valueObj.focus();
    
        return false;
    }
	 
    return true;
}

/**
 * 檢查統一編號格式, 如果不對, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validTaxId( idName, message )
{
    var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;
    
    if( !( /^\d{8}$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
        message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(如"12345678")';
        
        alert( message );
    
        valueObj.focus();
    
        return false;
    }
     
    return true;
}

/**
 * 檢查 URL 格式(如:http://www.yahoo.com.tw), 如果不對, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validUrl( idName, message )
{
    var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;
    
    if( !( /^(http|https):\/\/[\w]+\.[\w]{2,3}(\S*)?$/.test( value ) ) )
    {
        if( ( message == 'undefined' ) || message == null )
        message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(如"http://www.yahoo.com.tw")';
        
        alert( message );
    
        valueObj.focus();
    
        return false;
    }
     
    return true;
}

/**
 * 檢查身份證字號的格式, 如果不對, 顯示相對應的 message 
 * @idName
 * @message 如果沒有指定要顯示的錯誤訊息, 可以不用傳入這個參數
 */
function validIdentify( idName, message )
{
    var valueObj = getObject( idName );
    
    var value = valueObj.value;
    
    if( value.trim().length == 0 )
        return true;

    var acc = '00';
    
    var d0 = value.charAt( 0 );
    var d1 = value.charAt( 1 );
    var d2 = value.charAt( 2 );
    var d3 = value.charAt( 3 );
    var d4 = value.charAt( 4 );
    var d5 = value.charAt( 5 );
    var d6 = value.charAt( 6 );
    var d7 = value.charAt( 7 );
    var d8 = value.charAt( 8 );
    var d9 = value.charAt( 9 );
    
    if( ( d0 == 'A' ) || ( d0 == 'a' ) ) { acc = '10'; }
    else if( ( d0 == 'B' ) || (d0 == 'b' ) ) { acc = '11'; }
    else if( ( d0 == 'C' ) || (d0 == 'c' ) ) { acc = '12'; }
    else if( ( d0 == 'D' ) || (d0 == 'd' ) ) { acc = '13'; }
    else if( ( d0 == 'E' ) || (d0 == 'e' ) ) { acc = '14'; }
    else if( ( d0 == 'F' ) || (d0 == 'f' ) ) { acc = '15'; }
    else if( ( d0 == 'G' ) || (d0 == 'g' ) ) { acc = '16'; }
    else if( ( d0 == 'H' ) || (d0 == 'h' ) ) { acc = '17'; }
    else if( ( d0 == 'J' ) || (d0 == 'j' ) ) { acc = '18'; }
    else if( ( d0 == 'K' ) || (d0 == 'k' ) ) { acc = '19'; }
    else if( ( d0 == 'L' ) || (d0 == 'l' ) ) { acc = '20'; }
    else if( ( d0 == 'M' ) || (d0 == 'm' ) ) { acc = '21'; }
    else if( ( d0 == 'N' ) || (d0 == 'n' ) ) { acc = '22'; }
    else if( ( d0 == 'P' ) || (d0 == 'p' ) ) { acc = '23'; }
    else if( ( d0 == 'Q' ) || (d0 == 'q' ) ) { acc = '24'; }
    else if( ( d0 == 'R' ) || (d0 == 'r' ) ) { acc = '25'; }
    else if( ( d0 == 'S' ) || (d0 == 's' ) ) { acc = '26'; }
    else if( ( d0 == 'T' ) || (d0 == 't' ) ) { acc = '27'; }
    else if( ( d0 == 'U' ) || (d0 == 'u' ) ) { acc = '28'; }
    else if( ( d0 == 'V' ) || (d0 == 'v' ) ) { acc = '29'; }
    else if( ( d0 == 'W' ) || (d0 == 'w' ) ) { acc = '30'; }
    else if( ( d0 == 'X' ) || (d0 == 'x' ) ) { acc = '31'; }
    else if( ( d0 == 'Y' ) || (d0 == 'y' ) ) { acc = '32'; }
    else if( ( d0 == 'Z' ) || (d0 == 'z' ) ) { acc = '33'; }
    else if( ( d0 == 'I' ) || (d0 == 'i' ) ) { acc = '34'; }
    else if( ( d0 == 'O' ) || (d0 == 'o' ) ) { acc = '35'; }
    
   
    acc1 = acc.charAt( 0 );
    acc2 = acc.charAt( 1 );
    
    certsum = 1 * acc1 + 9 * acc2 + 8 * d1 + 7 * d2 + 6 * d3 + 5 * d4 + 4 * d5 + 3 * d6 + 2 * d7 + 1 * d8;
    certsum = parseInt( certsum % 10);
    certsum = 10 - certsum;
    if( d9 != certsum )
    {
        if( ( message == 'undefined' ) || message == null )
            message = '欄位' + '\"' + valueObj.title + '\"格式錯誤(不符合身份證驗證規則)';
        
        alert( message );

        valueObj.focus();
        
        return false;
    }
    
    return true;
}
